package com.acmen.demo.web;

import com.acmen.easyapi.annotation.DummyData;
import com.acmen.easyapi.annotation.Module;
import com.acmen.easyapi.annotation.ReqParam;
import com.acmen.easyapi.annotation.RestApi;
import com.acmen.easyapi.model.CustomizePage;
import com.acmen.easyapi.model.Response;
import com.acmen.demo.dto.cmd.UserAdd;
import com.acmen.demo.dto.cmd.UserUpd;
import com.acmen.demo.dto.query.UserListQry;
import com.acmen.demo.dto.query.UserPageQry;
import com.acmen.demo.dto.vo.UserVO;
import com.acmen.demo.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 用户信息
 *
 * @author acmen
 */
@RestController
@RequestMapping("/user")
@Module("用户管理")
public class UserController {
    @Resource
    private UserService userService;

    /**
     * 获取用户列表
     * @DummyData 虚拟数据注解
     * 后端编写一个接口需要一定的时间，所以前端等待后端开发完成后再去对接前端会比较浪费时间，
     * 所以后端开发者应先定好数据DTO对象，并加注解@DummyData，
     * 这样生成接口文档与访问接口能返回虚拟数据，前端就可以马上对接该接口。
     * 当后端开发者完成整个接口的逻辑时再与前端进行逻辑上的联调。
     */
    @GetMapping("/select-page")
    @RestApi(name = "用户分页查询",idx = 0,no = "User01",author = "acmen")
    @DummyData
    public Response<CustomizePage<UserVO>> selectPage(UserPageQry query) {
        return null;
       // return userService.selectPage(query);
    }

    /**
     * 获取用户列表
     * @DummyData 虚拟数据注解 jsonPath = "/dummy/select-list.json" 虚拟对象数据文件
     * 后端编写一个接口需要一定的时间，所以前端等待后端开发完成后再去对接前端会比较浪费时间，
     * 所以后端开发者应先定好数据DTO对象，并加注解@DummyData，
     * 这样生成接口文档与访问接口能返回虚拟数据，前端就可以马上对接该接口。
     * 当后端开发者完成整个接口的逻辑时再与前端进行逻辑上的联调。
     * */
    @GetMapping("/select-list")
    @RestApi(name = "用户列表查询",idx = 1,no = "User02",author = "acmen")
    @DummyData(jsonPath = "/dummy/select-list.json")
    public Response<List<UserVO>> selectList(UserListQry query) {
       // return userService.selectList(query);
        return null;
    }

    /**
     * 新增用户
     */
    @PostMapping("/create")
    @RestApi(name = "新增用户",idx = 2,author = "acmen")
    public Response create(@RequestBody UserAdd user) {
        return userService.create(user);
    }

    /**
     * 修改用户
     */
    @PutMapping("/update")
    @RestApi(name = "修改用户",idx = 3,author = "acmen")
    public Response update(@RequestBody UserUpd user) {
        return userService.update(user);
    }

    /**
     * 删除用户
     */
    @DeleteMapping("/delete")
    @RestApi(name = "删除用户",idx = 4,author = "acmen")
    public Response delete(@RequestBody List<Long> ids) {
        return userService.delete(ids);
    }


    @RestApi(name = "获取用户详细信息",idx = 5,author = "acmen")
    @GetMapping("/{id}")
    public Response<UserVO> selectById(@PathVariable("id")@ReqParam(label = "ID") Long id) {
        return userService.selectById(id);
    }
}
